//
//  YJBaseViewController.swift
//  微博
//
//  Created by YJW on 16/8/4.
//  Copyright © 2016年 yijiang. All rights reserved.
//

import UIKit

class YJBaseViewController: UIViewController {
    
    //登录标记
    let isLogOn = true
    
    //设置访客信息字典
    var visitorDictionary:[String:String]?
    
    //设置上拉刷新标记
    var isPullUp = false
    ///添加刷新控件
    var refreshControl:UIRefreshControl?
    
    //自定义导航条
    lazy var navigBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: UIScreen.main().bounds.size.width, height: 64))
    //自定义导航项，以后统一都会用 navigItem，不再使用 navigationItem
    lazy var navigItem = UINavigationItem()
    
    ///表格视图 - 如果用户没有登录，就不创建
    var tableView:UITableView?
    
    override func viewDidLoad() {
        super.viewDidLoad()

        setUpUI()
    }
    
    //重写 title 的 didSet（setter） 方法
    override var title: String?{
        didSet{
            navigItem.title = title
        }
    }
}

//MARK: - 给访客视图的 登录 和 注册 按钮添加监听
extension YJBaseViewController{
    
    @objc private func login(){
        print("登录")
    }
    
    @objc private func signUp(){
        print("注册")
    }
}

extension YJBaseViewController{
    
    private func setUpUI(){
        view.backgroundColor = UIColor.white()
        
        //取消自动布局
        automaticallyAdjustsScrollViewInsets = false
        
        setUpNavigationBar()
        
        isLogOn ? setUpTableView():setUpVisitorView()
        loadData()
    }
    
    //MARK: 设置 tableView
    func setUpTableView(){
       
        tableView = UITableView(frame: view.bounds, style: .plain)
        
        view.insertSubview(tableView!, belowSubview: navigBar)
        
        //对 tableView 的内容进行缩进
        tableView?.contentInset = UIEdgeInsets(top: navigBar.bounds.height,
                                               left: 0,
                                               bottom: tabBarController?.tabBar.bounds.height ?? 49,
                                               right: 0)
        
        tableView?.dataSource = self
        tableView?.delegate = self
        
        ///添加刷新控件
        //1.初始化刷新控件
        refreshControl = UIRefreshControl()
        //2.添加到 tableView
        tableView?.addSubview(refreshControl!)
        //3.绑定方法
        refreshControl?.addTarget(self, action: #selector(loadData), for: .valueChanged)
    }
    
    //MARK: 设置访客视图
    private func setUpVisitorView(){
        
        let visitorView = YJVisitorView(frame: view.bounds)
        
        view.insertSubview(visitorView, belowSubview: navigBar)
        
        //1.设置访客视图信息
        visitorView.visitorInfo = visitorDictionary
        
        //2.添加访客视图按钮的监听方法
        visitorView.loginBtn.addTarget(self, action: #selector(login), for: .touchUpInside)
        visitorView.signUpBtn.addTarget(self, action: #selector(signUp), for: .touchUpInside)
        
        //3.设置导航条按钮
        navigItem.leftBarButtonItem = UIBarButtonItem(title: "注册", style: .plain, target: self, action: #selector(signUp))
        navigItem.rightBarButtonItem = UIBarButtonItem(title: "登录", style: .plain, target: self, action: #selector(login))
    }
    
    //MARK: 设置导航条
    private func setUpNavigationBar(){
        
        navigBar.items = [navigItem]
        
        view.addSubview(navigBar)
        
        //设置 navigationBar 渲染模式
        navigBar.barTintColor = UIColor(colorLiteralRed: 227/250, green: 227/250, blue: 227/250, alpha: 1)
        
        //设置 navBar 的字体颜色
        navigBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.darkGray()]
        
        //设置系统按钮的文字渲染颜色
        navigBar.tintColor = UIColor.orange()
    }
    
    //MARK: 设置空的 loadData 方法
    func loadData(){

        ///没有下载任务时 3s 后菊花停止转动
        DispatchQueue.main.after(when: DispatchTime.now()+3) {
            self.refreshControl?.endRefreshing()
            
        }
    }
}

///数据源方法：基类准备方法，子类实现方法，子类的数据源方法不需要 super
extension YJBaseViewController:UITableViewDelegate,UITableViewDataSource{
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return 0
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        return UITableViewCell()
    }
    
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        
        let row = indexPath.row
        let section = tableView.numberOfSections - 1
        
        if row<0 || section<0 {
            return
        }
        
        let count = tableView.numberOfRows(inSection: section)
        
        if row == count-1 && !isPullUp {
            print("上拉刷新")
            
            isPullUp = true
            loadData()
        }
        
    }
}
